<!DOCTYPE html>
<!-- saved from url=(0131)https://docs.google.com/document/u/1/d/e/2PACX-1vTojhGqZTinkuvOgMPxYLggCwg_XXTVbXUql2WdHRuSqQO8HUjr32OxNLkzXao6LqpUwJX1b69SMp_b/pub -->
<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>WebPerfWG call - July 2nd 2020</title><link rel="shortcut icon" href="https://ssl.gstatic.com/docs/documents/images/kix-favicon7.ico"><meta name="referrer" content="strict-origin-when-cross-origin"><style type="text/css" nonce="">
      @import url("https://fonts.googleapis.com/css?family=Google+Sans");
      @import url("https://fonts.googleapis.com/css?family=Roboto");

      body {
        font-family: Roboto, arial, sans, sans-serif;
        margin: 0;
      }

      iframe {
        border: 0;
        frameborder: 0;
        height: 100%;
        width: 100%;
      }

      #header {
        align-items: center;
        background: white;
        border-bottom: 1px #ccc solid;
        display: flex;
        height: 60px;
        justify-content: space-between;
        position: fixed;
        top: 0;
        width: 100%;
        z-index: 100;
      }

      #header #title {
        font-family: 'Google Sans';
        font-size: large;
        margin: auto 0 auto 20px;
        overflow: hidden;
        text-overflow: ellipsis;
        white-space: nowrap;
        width: 70%;
      }

      #header #interval {
        margin: auto 25px auto 0;
        font-family: Roboto;
        font-size: small;;
      }

      #footer {
        background: #f0f0f0;
        border-bottom: 1px #ccc solid;
        bottom: 0;
        font-family: Roboto;
        font-size: small;
        padding: 10px 10px;
        position: fixed;
        text-align: center;
        width: 100%;
      }

      #contents {
        padding: 100px 20% 50px 20%;
      }

      @media only screen and (max-device-width: 800px) {
        #header {
          border-bottom-width: 5px;
          height: auto;
          display: block;
        }

        #header #title {
          font-size: 3em;
          margin: auto 0 auto 20px;
          width: 90%;
        }

        #header #interval {
          font-size: 1.5em;
          margin: 10px 0 auto 25px;
        }

        #contents {
          padding: 150px 5% 80px;
        }

        #footer {
          font-size: 2em;
        }
      }

      .dash {
        padding: 0 6px;
      }
    </style></head><body><div id="header"><div id="title">WebPerfWG call - July 2nd 2020</div><div id="interval"><span></span></div></div><div id="contents"><style type="text/css">.lst-kix_fixyvbpl28q6-2>li:before{content:"\0025a0  "}ul.lst-kix_5hr5yid9fa24-0{list-style-type:none}.lst-kix_fixyvbpl28q6-0>li:before{content:"\0025cf  "}.lst-kix_fixyvbpl28q6-4>li:before{content:"\0025cb  "}.lst-kix_fixyvbpl28q6-3>li:before{content:"\0025cf  "}ul.lst-kix_5hr5yid9fa24-8{list-style-type:none}ul.lst-kix_5hr5yid9fa24-7{list-style-type:none}ul.lst-kix_5hr5yid9fa24-6{list-style-type:none}ul.lst-kix_5hr5yid9fa24-5{list-style-type:none}ul.lst-kix_5hr5yid9fa24-4{list-style-type:none}ul.lst-kix_5hr5yid9fa24-3{list-style-type:none}.lst-kix_fixyvbpl28q6-1>li:before{content:"\0025cb  "}ul.lst-kix_5hr5yid9fa24-2{list-style-type:none}ul.lst-kix_5hr5yid9fa24-1{list-style-type:none}ul.lst-kix_v4z0y93i69a9-2{list-style-type:none}ul.lst-kix_v4z0y93i69a9-3{list-style-type:none}ul.lst-kix_v4z0y93i69a9-0{list-style-type:none}.lst-kix_fixyvbpl28q6-8>li:before{content:"\0025a0  "}ul.lst-kix_v4z0y93i69a9-1{list-style-type:none}.lst-kix_fixyvbpl28q6-7>li:before{content:"\0025cb  "}.lst-kix_fixyvbpl28q6-6>li:before{content:"\0025cf  "}ul.lst-kix_v4z0y93i69a9-8{list-style-type:none}ul.lst-kix_v4z0y93i69a9-6{list-style-type:none}ul.lst-kix_v4z0y93i69a9-7{list-style-type:none}.lst-kix_fixyvbpl28q6-5>li:before{content:"\0025a0  "}ul.lst-kix_v4z0y93i69a9-4{list-style-type:none}ul.lst-kix_v4z0y93i69a9-5{list-style-type:none}.lst-kix_5hr5yid9fa24-7>li:before{content:"\0025cb  "}.lst-kix_5hr5yid9fa24-6>li:before{content:"\0025cf  "}.lst-kix_5hr5yid9fa24-3>li:before{content:"\0025cf  "}.lst-kix_5hr5yid9fa24-5>li:before{content:"\0025a0  "}.lst-kix_5hr5yid9fa24-4>li:before{content:"\0025cb  "}ul.lst-kix_fixyvbpl28q6-1{list-style-type:none}ul.lst-kix_fixyvbpl28q6-0{list-style-type:none}ul.lst-kix_qj45rjv1hkvy-8{list-style-type:none}ul.lst-kix_qj45rjv1hkvy-7{list-style-type:none}ul.lst-kix_qj45rjv1hkvy-6{list-style-type:none}ul.lst-kix_qj45rjv1hkvy-5{list-style-type:none}ul.lst-kix_fixyvbpl28q6-8{list-style-type:none}ul.lst-kix_qj45rjv1hkvy-4{list-style-type:none}ul.lst-kix_fixyvbpl28q6-7{list-style-type:none}ul.lst-kix_qj45rjv1hkvy-3{list-style-type:none}ul.lst-kix_fixyvbpl28q6-6{list-style-type:none}ul.lst-kix_qj45rjv1hkvy-2{list-style-type:none}ul.lst-kix_fixyvbpl28q6-5{list-style-type:none}ul.lst-kix_qj45rjv1hkvy-1{list-style-type:none}ul.lst-kix_fixyvbpl28q6-4{list-style-type:none}ul.lst-kix_qj45rjv1hkvy-0{list-style-type:none}ul.lst-kix_fixyvbpl28q6-3{list-style-type:none}ul.lst-kix_fixyvbpl28q6-2{list-style-type:none}.lst-kix_5hr5yid9fa24-8>li:before{content:"\0025a0  "}.lst-kix_8axz801hyvh5-7>li:before{content:"\0025cb  "}.lst-kix_8axz801hyvh5-8>li:before{content:"\0025a0  "}.lst-kix_v4z0y93i69a9-0>li:before{content:"\0025cf  "}.lst-kix_8axz801hyvh5-5>li:before{content:"\0025a0  "}.lst-kix_qj45rjv1hkvy-0>li:before{content:"\0025cf  "}.lst-kix_8axz801hyvh5-6>li:before{content:"\0025cf  "}.lst-kix_5hr5yid9fa24-1>li:before{content:"\0025cb  "}.lst-kix_8axz801hyvh5-1>li:before{content:"\0025cb  "}.lst-kix_qj45rjv1hkvy-2>li:before{content:"\0025a0  "}.lst-kix_qj45rjv1hkvy-3>li:before{content:"\0025cf  "}ul.lst-kix_8axz801hyvh5-6{list-style-type:none}.lst-kix_qj45rjv1hkvy-1>li:before{content:"\0025cb  "}.lst-kix_qj45rjv1hkvy-5>li:before{content:"\0025a0  "}ul.lst-kix_8axz801hyvh5-5{list-style-type:none}.lst-kix_8axz801hyvh5-0>li:before{content:"\0025cf  "}.lst-kix_8axz801hyvh5-4>li:before{content:"\0025cb  "}ul.lst-kix_8axz801hyvh5-8{list-style-type:none}.lst-kix_5hr5yid9fa24-2>li:before{content:"\0025a0  "}ul.lst-kix_8axz801hyvh5-7{list-style-type:none}ul.lst-kix_8axz801hyvh5-2{list-style-type:none}ul.lst-kix_8axz801hyvh5-1{list-style-type:none}ul.lst-kix_8axz801hyvh5-4{list-style-type:none}ul.lst-kix_8axz801hyvh5-3{list-style-type:none}.lst-kix_8axz801hyvh5-3>li:before{content:"\0025cf  "}.lst-kix_qj45rjv1hkvy-4>li:before{content:"\0025cb  "}.lst-kix_5hr5yid9fa24-0>li:before{content:"\0025cf  "}ul.lst-kix_8axz801hyvh5-0{list-style-type:none}.lst-kix_8axz801hyvh5-2>li:before{content:"\0025a0  "}.lst-kix_v4z0y93i69a9-8>li:before{content:"\0025a0  "}.lst-kix_qj45rjv1hkvy-6>li:before{content:"\0025cf  "}.lst-kix_qj45rjv1hkvy-7>li:before{content:"\0025cb  "}.lst-kix_v4z0y93i69a9-6>li:before{content:"\0025cf  "}.lst-kix_v4z0y93i69a9-7>li:before{content:"\0025cb  "}.lst-kix_qj45rjv1hkvy-8>li:before{content:"\0025a0  "}li.li-bullet-0:before{margin-left:-18pt;white-space:nowrap;display:inline-block;min-width:18pt}.lst-kix_v4z0y93i69a9-3>li:before{content:"\0025cf  "}.lst-kix_v4z0y93i69a9-2>li:before{content:"\0025a0  "}.lst-kix_v4z0y93i69a9-4>li:before{content:"\0025cb  "}.lst-kix_v4z0y93i69a9-1>li:before{content:"\0025cb  "}.lst-kix_v4z0y93i69a9-5>li:before{content:"\0025a0  "}ol{margin:0;padding:0}table td,table th{padding:0}.c0{margin-left:36pt;padding-top:0pt;padding-left:0pt;padding-bottom:0pt;line-height:1.15;orphans:2;widows:2;text-align:left}.c5{padding-top:20pt;padding-bottom:6pt;line-height:1.15;page-break-after:avoid;orphans:2;widows:2;text-align:left}.c10{padding-top:18pt;padding-bottom:6pt;line-height:1.15;page-break-after:avoid;orphans:2;widows:2;text-align:left}.c7{color:#000000;font-weight:400;text-decoration:none;vertical-align:baseline;font-size:11pt;font-family:"Arial";font-style:normal}.c11{color:#000000;font-weight:400;text-decoration:none;vertical-align:baseline;font-size:20pt;font-family:"Arial";font-style:normal}.c4{color:#000000;font-weight:400;text-decoration:none;vertical-align:baseline;font-size:16pt;font-family:"Arial";font-style:normal}.c1{padding-top:0pt;padding-bottom:0pt;line-height:1.15;orphans:2;widows:2;text-align:left;height:11pt}.c3{padding-top:0pt;padding-bottom:0pt;line-height:1.15;orphans:2;widows:2;text-align:left}.c12{text-decoration-skip-ink:none;-webkit-text-decoration-skip:none;color:#1155cc;text-decoration:underline}.c9{background-color:#ffffff;max-width:468pt;padding:72pt 72pt 72pt 72pt}.c6{margin-left:72pt;padding-left:0pt}.c13{color:inherit;text-decoration:inherit}.c8{padding:0;margin:0}.c2{font-weight:700}.title{padding-top:0pt;color:#000000;font-size:26pt;padding-bottom:3pt;font-family:"Arial";line-height:1.15;page-break-after:avoid;orphans:2;widows:2;text-align:left}.subtitle{padding-top:0pt;color:#666666;font-size:15pt;padding-bottom:16pt;font-family:"Arial";line-height:1.15;page-break-after:avoid;orphans:2;widows:2;text-align:left}li{color:#000000;font-size:11pt;font-family:"Arial"}p{margin:0;color:#000000;font-size:11pt;font-family:"Arial"}h1{padding-top:20pt;color:#000000;font-size:20pt;padding-bottom:6pt;font-family:"Arial";line-height:1.15;page-break-after:avoid;orphans:2;widows:2;text-align:left}h2{padding-top:18pt;color:#000000;font-size:16pt;padding-bottom:6pt;font-family:"Arial";line-height:1.15;page-break-after:avoid;orphans:2;widows:2;text-align:left}h3{padding-top:16pt;color:#434343;font-size:14pt;padding-bottom:4pt;font-family:"Arial";line-height:1.15;page-break-after:avoid;orphans:2;widows:2;text-align:left}h4{padding-top:14pt;color:#666666;font-size:12pt;padding-bottom:4pt;font-family:"Arial";line-height:1.15;page-break-after:avoid;orphans:2;widows:2;text-align:left}h5{padding-top:12pt;color:#666666;font-size:11pt;padding-bottom:4pt;font-family:"Arial";line-height:1.15;page-break-after:avoid;orphans:2;widows:2;text-align:left}h6{padding-top:12pt;color:#666666;font-size:11pt;padding-bottom:4pt;font-family:"Arial";line-height:1.15;page-break-after:avoid;font-style:italic;orphans:2;widows:2;text-align:left}</style><div class="c9"><h1 class="c5" id="h.j40kn891shfq"><span class="c11">Participants</span></h1><p class="c3"><span class="c7">Noam Helfman, Yoav Weiss, Nic Jansma, Hamidreza Jahtalabziabari, Michal Mocny, Michelle Vu, Nicol&aacute;s Pe&ntilde;a, Benjamin De Kosnik, Philippe Le Hegaret, Steven Bougon, Gilles Dubuc, Thomas Kelly</span></p><h1 class="c5" id="h.xy4y5iq5c7ce"><span class="c11">Next Meeting</span></h1><p class="c3"><span class="c7">July 30th at 10am PST / 1pm EST</span></p><h1 class="c5" id="h.74jjsxsjugky"><span class="c11">Presentations</span></h1><p class="c3"><span>Page visibility - </span><span class="c12"><a class="c13" href="https://www.google.com/url?q=https://docs.google.com/presentation/d/100v6-4uHofi0XXhHK2fxLvwxrnUBtampVamsHmdnwq0/edit?usp%3Dsharing&amp;sa=D&amp;source=editors&amp;ust=1613234284080000&amp;usg=AOvVaw0cG4CM3ZtzirgM1UZGmvY1">slides</a></span></p><ul class="c8 lst-kix_v4z0y93i69a9-0 start"><li class="c0 li-bullet-0"><span class="c2">Nicol&aacute;s</span><span class="c7"><b></b>: Problems - page visibility gives us incomplete history</span></li><li class="c0 li-bullet-0"><span class="c7">… For paint timing you want to take visibility into account, otherwise the timings are tainted</span></li><li class="c0 li-bullet-0"><span class="c7">… Not super discoverable for Paint Timing</span></li><li class="c0 li-bullet-0"><span class="c7">… Outcomes for discussion: </span></li></ul><ul class="c8 lst-kix_v4z0y93i69a9-1 start"><li class="c3 c6 li-bullet-0"><span class="c7">No need to add API to solve discoverability - RUM vendors and performance teams can surface it. Documentation can also help.</span></li><li class="c3 c6 li-bullet-0"><span class="c7">Need to add a new visibility PerformanceEntry - one for initial state and another for each visibility change</span></li><li class="c3 c6 li-bullet-0"><span class="c7">Could deduce first one from current visibility state and any changes, but having the first one in the buffer explicitly is nicer for usability</span></li></ul><p class="c1"><span class="c7"></span></p><p class="c1"><span class="c7"></span></p><ul class="c8 lst-kix_v4z0y93i69a9-0"><li class="c0 li-bullet-0"><span style="overflow: hidden;<b> display</b>: inline-block;<b> margin</b>: 0.00px 0.00px;<b> border</b>: 0.00px solid #000000;<b> transform</b>: rotate(0.00rad) translateZ(0px); -webkit-transform: rotate(0.00rad) translateZ(0px);<b> width</b>: 624.00px;<b> height</b>: 350.67px;"><img alt="" src="./index_files/Screenshot 2020-07-02 at 19.09.24.png" style="width: 624.00px;<b> height</b>: 350.67px; margin-left: 0.00px; margin-top: 0.00px;<b> transform</b>: rotate(0.00rad) translateZ(0px); -webkit-transform: rotate(0.00rad) translateZ(0px);" title=""></span></li></ul><ul class="c8 lst-kix_v4z0y93i69a9-1 start"><li class="c3 c6 li-bullet-0"><span class="c7">Regarding duration - might be useful/confusing to add duration of visibility change handlers</span></li></ul><ul class="c8 lst-kix_v4z0y93i69a9-0"><li class="c0 li-bullet-0"><span class="c2">Nic</span><span class="c7"><b></b>: Feel like duration of handlers would be useful but having it be another explicit attribute (processingStart) would be clearer</span></li><li class="c0 li-bullet-0"><span class="c7">… Duration of 0 would be fine, since other entries like Marks have a duration of 0</span></li><li class="c0 li-bullet-0"><span class="c2">Noam</span><span class="c7"><b></b>: For the first event, would it make sense to insert it artificially?</span></li><li class="c0 li-bullet-0"><span class="c2">Nicol&aacute;s</span><span class="c7"><b></b>: Yes the first state would be inserted with startTime=0</span></li><li class="c0 li-bullet-0"><span class="c2">Yoav</span><span class="c7"><b></b>: If a page was loaded and never moved to background or foreground, how would you know what state it’s in?</span></li><li class="c0 li-bullet-0"><span class="c2">Nicol&aacute;s</span><span class="c7"><b></b>: You would query the current visibility state</span></li><li class="c0 li-bullet-0"><span class="c2">Yoav</span><span class="c7"><b></b>: So at the moment you’re querying you have to look at both the current visibility state and the buffer</span></li><li class="c0 li-bullet-0"><span class="c2">Nicol&aacute;s</span><span class="c7"><b></b>: Yeah and that feels a little sketchy to have to do that</span></li><li class="c0 li-bullet-0"><span class="c2">Nic</span><span class="c7"><b></b>: Would be easier to use if we always emit the first entry</span></li><li class="c0 li-bullet-0"><span class="c2">Noam</span><span class="c7"><b></b>: Any other indicator that the entry is the first one?</span></li><li class="c0 li-bullet-0"><span class="c2">Nicol&aacute;s</span><span class="c7"><b></b>: The startTime would be set to 0</span></li><li class="c0 li-bullet-0"><span class="c2">Nicol&aacute;s</span><span class="c7"><b></b>: Another comment on PageVisibility was that it is not really performance so why is it PerformanceObserver? Answer is that it’s the exact buffering we need and it helps Performance analytics. Alternatively we can reimplement PO as an independent thing</span></li><li class="c0 li-bullet-0"><span class="c2">Noam</span><span class="c7"><b></b>: Makes sense to reuse PO</span></li><li class="c0 li-bullet-0"><span class="c2">Yoav</span><span class="c7"><b></b>: Same here</span></li><li class="c0 li-bullet-0"><span class="c2">Nicol&aacute;s</span><span class="c7"><b></b>: Bikeshedding the name: VisibilityState? VisibilityStateEntry?</span></li><li class="c0 li-bullet-0"><span class="c2">Nic</span><span>/</span><span class="c2">Noam</span><span class="c7"><b></b>: PerformanceVisibilityState? VisibilityStateEntry?</span></li><li class="c0 li-bullet-0"><span class="c2">Benjamin</span><span class="c7"><b></b>: Goal is to keep consistency - VisibilityState seems acceptable</span></li><li class="c0 li-bullet-0"><span class="c2">Michelle</span><span class="c7"><b></b>: If we passed the buffered flag, does that give the entire history?</span></li><li class="c0 li-bullet-0"><span class="c2">Nicol&aacute;s</span><span class="c7"><b></b>: Yes, but it will only buffer until it becomes full. But buffers should be large enough so you can assume you have all the history when your register</span></li><li class="c0 li-bullet-0"><span class="c2">Michelle</span><span class="c7"><b></b>: So initial entries may be dropped</span></li><li class="c0 li-bullet-0"><span class="c2">Nicol&aacute;s</span><span class="c7"><b></b>: No, it’s the last ones that can drop</span></li><li class="c0 li-bullet-0"><span class="c2">Michelle</span><span class="c7"><b></b>: Interested in seeing the first ones where people toggle, as a sort of abandonment</span></li><li class="c0 li-bullet-0"><span class="c2">Nicol&aacute;s</span><span class="c7"><b></b>: So need to look at the second entry</span></li><li class="c0 li-bullet-0"><span class="c2">Nic</span><span class="c7"><b></b>: Proposal regarding reasonable buffer size?</span></li><li class="c0 li-bullet-0"><span class="c2">Nicol&aacute;s</span><span class="c7"><b></b>: Didn’t gather data yet. The number is probably not huge</span></li><li class="c0 li-bullet-0"><span class="c2">Nic</span><span class="c7"><b></b>: When you call the buffered flag, you don’t know if the buffer was reached. Edge case, but might be useful.</span></li><li class="c0 li-bullet-0"><span class="c2">Nicol&aacute;s</span><span class="c7"><b></b>: Valid point. Can add a flag to the observer callback</span></li><li class="c0 li-bullet-0"><span class="c2">Nic</span><span class="c7"><b></b>: Is currently not known and can change over time, so would be good to export it. I’ll open an issue</span></li><li class="c0 li-bullet-0"><span class="c2">Nicol&aacute;s</span><span class="c7"><b></b>: My next steps are to send PRs to page visibility, as we’d probably define it there.</span></li><li class="c0 li-bullet-0"><span class="c7">… Also, Page Visibility defines VisibilityState already, so probably don’t want to override it</span></li><li class="c0 li-bullet-0"><span class="c2">Michal</span><span class="c7"><b></b>: Whether or not we add initial visibility entry: if we did not, and the suggestion is to infer the initial state from any changed states, right now that works because there’s only two states (visible and hidden). &nbsp;If another state was added (e.g. we had prerender), you couldn’t infer the first state. &nbsp;So it’s good to be explicit.</span></li><li class="c0 li-bullet-0"><span class="c2">Yoav</span><span class="c7"><b></b>: Should be an L3 thing, because L2 is almost done</span></li><li class="c0 li-bullet-0"><span class="c2">Plh</span><span class="c7"><b></b>: Cool with that</span></li><li class="c0 li-bullet-0"><span class="c2">Yoav</span><span class="c7"><b></b>: Maybe worthwhile to try to wrap up L2</span></li></ul><h2 class="c10" id="h.mpn5up314v6r"><span class="c4">TPAC</span></h2><ul class="c8 lst-kix_8axz801hyvh5-0 start"><li class="c0 li-bullet-0"><span class="c2">Nic</span><span class="c7"><b></b>: Getting ready for TPAC. Virtual meeting this year.</span></li><li class="c0 li-bullet-0"><span class="c2">Yoav</span><span class="c7"><b></b>: One thing we need to decide is what week we want to meet</span></li><li class="c0 li-bullet-0"><span class="c7">… Official week is Oct26 for unconference sessions</span></li><li class="c0 li-bullet-0"><span class="c7">… The week for this working group’s TPAC meetings should not be that week.</span></li><li class="c0 li-bullet-0"><span class="c7">… There’s a form with 3 questions:</span></li><li class="c0 li-bullet-0"><span class="c7">… (1) What week we can have this TPAC</span></li><li class="c0 li-bullet-0"><span class="c7">… (2) We were talking about having hackathon days before TPAC (which we did at previous meetings). &nbsp;We’d have a few online sessions to attack multiple issues. &nbsp;Somewhere in August or September.</span></li><li class="c0 li-bullet-0"><span class="c2">PLH</span><span class="c7"><b></b>: TPAC will be free this year</span></li><li class="c0 li-bullet-0"><span class="c2">Yoav</span><span class="c7"><b></b>: (3) Final question is what timezone works best, we’ll try to make it as less awkward as possible</span></li><li class="c0 li-bullet-0"><span class="c7">… 4x 3-hour meetings in a single week over 4 days</span></li><li class="c0 li-bullet-0"><span class="c2">PLH</span><span class="c7"><b></b>: With a break in between the 3 hours</span></li><li class="c0 li-bullet-0"><span class="c2">Benjamin</span><span class="c7"><b></b>: One meeting a day is preferred</span></li><li class="c0 li-bullet-0"><span class="c2">Nic</span><span class="c7"><b></b>: Ahead of time we’ll be doing some prepwork with agenda so people can join for topics they want to discuss</span></li></ul><h2 class="c10" id="h.m0xnjqh1g76x"><span class="c4">Process 2020</span></h2><ul class="c8 lst-kix_qj45rjv1hkvy-0 start"><li class="c0 li-bullet-0"><span class="c2">PLH</span><span class="c7"><b></b>: Started review of Process 2020</span></li></ul><ul class="c8 lst-kix_5hr5yid9fa24-0 start"><li class="c0 li-bullet-0"><span class="c7">… Will be effective in September 15</span></li><li class="c0 li-bullet-0"><span class="c2">Yoav</span><span class="c7"><b></b>: If we wanted to adopt the patent policy, we need to recharter</span></li></ul><h2 class="c10" id="h.voo5w9w959vv"><span class="c4">Reporting API Question</span></h2><ul class="c8 lst-kix_fixyvbpl28q6-0 start"><li class="c0 li-bullet-0"><span class="c2">Noam</span><span class="c7"><b></b>: Error reporting API to support crashes</span></li><li class="c0 li-bullet-0"><span class="c2">Nic</span><span class="c7"><b></b>: You do get crash reports today</span></li><li class="c0 li-bullet-0"><span class="c2">Noam</span><span class="c7"><b></b>: Anything beyond crashes?</span></li><li class="c0 li-bullet-0"><span class="c2">Nic</span><span class="c7"><b></b>: There’s a discussion around that. Was recently split into separate specs. Discussion on additional data, but it can be privacy sensitive</span></li><li class="c0 li-bullet-0"><span class="c2">Noam</span><span class="c7"><b></b>: Useful to understand the source of the crash</span></li><li class="c0 li-bullet-0"><span class="c2">Yoav</span><span class="c7"><b></b>: OOM crashes are split apart, for other things crashes are a source of privacy and security issues so we don’t want to send those reports to arbitrary sites</span></li><li class="c0 li-bullet-0"><span class="c7">... If it’s a render crash, some browsers may have cross-origin information in those renders, which isn’t OK for one site to share</span></li><li class="c0 li-bullet-0"><span class="c2">Nic</span><span class="c7"><b></b>: Today the only available reason is OOM</span></li></ul><h2 class="c10" id="h.8z08w3gr7smw"><span class="c4">Element Timing API</span></h2><ul class="c8 lst-kix_fixyvbpl28q6-0"><li class="c0 li-bullet-0"><span class="c2">Noam</span><span class="c7"><b></b>: Currently it supports img, svg, etc. Would it make sense to add support for canvas?</span></li><li class="c0 li-bullet-0"><span class="c7">… We’d need to define what it means - every draw to canvas? The initial paint?</span></li><li class="c0 li-bullet-0"><span class="c7">… I initially thought we’d want it to reflect the first time the canvas is painted.</span></li><li class="c0 li-bullet-0"><span class="c7">… Most of the expensive drawing is done off screen, and it would be good to measure when the canvas is shown to the user</span></li><li class="c0 li-bullet-0"><span class="c2">Nicol&aacute;s</span><span class="c7"><b></b>: Makes sense. If the canvas is built off-screen, wouldn’t you know when you placed it, when it comes on screen?</span></li><li class="c0 li-bullet-0"><span class="c2">Noam</span><span class="c7"><b></b>: You can always have an onload handler, or register a requestAnimationFrame? &nbsp;But not as accurate.</span></li><li class="c0 li-bullet-0"><span class="c2">Nicol&aacute;s</span><span class="c7"><b></b>: Could you file an issue?</span></li><li class="c0 li-bullet-0"><span class="c2">Yoav</span><span class="c7"><b></b>: Are any paint operations asynchronous?</span></li><li class="c0 li-bullet-0"><span class="c2">Noam</span><span class="c7"><b></b>: API is sync but operations may be grouped and executed asynchronous</span></li><li class="c0 li-bullet-0"><span class="c2">...</span><span class="c7"><b></b>: Only once a script completes drawing, not for every operation</span></li></ul><h2 class="c10" id="h.vustsycfmylm"><span class="c4">Abandonment API</span></h2><ul class="c8 lst-kix_fixyvbpl28q6-0"><li class="c0 li-bullet-0"><span class="c2">Nicol&aacute;s</span><span class="c7"><b></b>: Wanted to clarify that Origin Policy is not coming soon necessarily. Does anyone have thoughts on the path forward for abandonment API without Origin Policy?</span></li><li class="c0 li-bullet-0"><span class="c7">… The options seem to be:</span></li></ul><ul class="c8 lst-kix_fixyvbpl28q6-1 start"><li class="c3 c6 li-bullet-0"><span class="c7">&nbsp;to use something like NEL without under-specified caching.</span></li><li class="c3 c6 li-bullet-0"><span class="c7">Make current Origin Policy work for us, but that won’t work for other use-cases of Origin Policy</span></li></ul><ul class="c8 lst-kix_fixyvbpl28q6-0"><li class="c0 li-bullet-0"><span class="c7">… Thoughts?</span></li><li class="c0 li-bullet-0"><span class="c2">Nic</span><span class="c7"><b></b>: Don’t know much about NEL caching. Is it not well specified?</span></li><li class="c0 li-bullet-0"><span class="c2">Nicol&aacute;s</span><span class="c7"><b></b>: It just says that the UA will cache as it wants</span></li><li class="c0 li-bullet-0"><span class="c7">… are there any other issues with NEL’s mechanisms?</span></li><li class="c0 li-bullet-0"><span class="c2">Yoav</span><span class="c7"><b></b>: Chrome security folks are concerned about arbitrary headers applying to site-wide things</span></li><li class="c0 li-bullet-0"><span class="c7">… They consider origin policy to be a more centralized way for how an origin should behave</span></li><li class="c0 li-bullet-0"><span class="c7">… But no one currently owns it</span></li><li class="c0 li-bullet-0"><span class="c2">Nicol&aacute;s</span><span class="c7"><b></b>: What are the concerns?</span></li><li class="c0 li-bullet-0"><span class="c2">Yoav</span><span class="c7"><b></b>: A single resource that defines policy for origin-wide things, isn’t healthy</span></li><li class="c0 li-bullet-0"><span class="c2">Nicol&aacute;s</span><span class="c7"><b></b>: COnclusion is we have no idea yet how to register for Aborts/Abandonment </span></li></ul><p class="c1"><span class="c7"></span></p></div></div><div id="footer"><span>Published by <a target="_blank" title="Learn more about Google Drive" href="https://docs.google.com/">Google Drive</a></span><span class="dash">–</span><a href="https://docs.google.com/u/1/abuse?id=AKkXjoy6YqXQ2EpARDxi5eq_97BegUxmfn3TROW9AMVy-Vvq8BcUU7atN3R-BqImnHEFFIXMC_WU6-lBsB67eiw:0">Report Abuse</a></div><script type="text/javascript" nonce="">(function(){/*

 Copyright The Closure Library Authors.
 SPDX-License-Identifier: Apache-2.0
*/
var aa="function"==typeof Object.defineProperties?Object.defineProperty:function(a,b,c){if(a==Array.prototype||a==Object.prototype)return a;a[b]=c.value;return a};function ba(a){a=["object"==typeof globalThis&&globalThis,a,"object"==typeof window&&window,"object"==typeof self&&self,"object"==typeof global&&global];for(var b=0;b<a.length;++b){var c=a[b];if(c&&c.Math==Math)return c}throw Error("Cannot find global object");}var ca=ba(this);
function da(a,b){if(b)a:{var c=ca;a=a.split(".");for(var d=0;d<a.length-1;d++){var e=a[d];if(!(e in c))break a;c=c[e]}a=a[a.length-1];d=c[a];b=b(d);b!=d&&null!=b&&aa(c,a,{configurable:!0,writable:!0,value:b})}}var ea="function"==typeof Object.create?Object.create:function(a){function b(){}b.prototype=a;return new b},fa;
if("function"==typeof Object.setPrototypeOf)fa=Object.setPrototypeOf;else{var ha;a:{var ia={a:!0},ja={};try{ja.__proto__=ia;ha=ja.a;break a}catch(a){}ha=!1}fa=ha?function(a,b){a.__proto__=b;if(a.__proto__!==b)throw new TypeError(a+" is not extensible");return a}:null}var ka=fa;
function h(a,b){a.prototype=ea(b.prototype);a.prototype.constructor=a;if(ka)ka(a,b);else for(var c in b)if("prototype"!=c)if(Object.defineProperties){var d=Object.getOwnPropertyDescriptor(b,c);d&&Object.defineProperty(a,c,d)}else a[c]=b[c];a.o=b.prototype}da("Object.is",function(a){return a?a:function(b,c){return b===c?0!==b||1/b===1/c:b!==b&&c!==c}});var l=this||self;function la(){}function ma(a){var b=typeof a;return"object"==b&&null!=a||"function"==b}
function na(a,b){var c=Array.prototype.slice.call(arguments,1);return function(){var d=c.slice();d.push.apply(d,arguments);return a.apply(this,d)}}function oa(a,b){function c(){}c.prototype=b.prototype;a.o=b.prototype;a.prototype=new c;a.prototype.constructor=a;a.B=function(d,e,f){for(var g=Array(arguments.length-2),k=2;k<arguments.length;k++)g[k-2]=arguments[k];return b.prototype[e].apply(d,g)}}function pa(a){return a};var qa=Array.prototype.indexOf?function(a,b){return Array.prototype.indexOf.call(a,b,void 0)}:function(a,b){if("string"===typeof a)return"string"!==typeof b||1!=b.length?-1:a.indexOf(b,0);for(var c=0;c<a.length;c++)if(c in a&&a[c]===b)return c;return-1};function ra(a,b,c){for(var d in a)b.call(c,a[d],d,a)};var m;function p(a,b){this.i=a===sa&&b||"";this.j=ta}p.prototype.h=!0;p.prototype.g=function(){return this.i};var ta={},sa={};var ua=String.prototype.trim?function(a){return a.trim()}:function(a){return/^[\s\xa0]*([\s\S]*?)[\s\xa0]*$/.exec(a)[1]},va=/&/g,wa=/</g,xa=/>/g,ya=/"/g,za=/'/g,Aa=/\x00/g,Ba=/[\x00&<>"']/;function Ca(a,b){return a<b?-1:a>b?1:0};function q(a,b){this.i=b===r?a:""}q.prototype.h=!0;q.prototype.g=function(){return this.i.toString()};q.prototype.toString=function(){return this.i.toString()};function u(a){return a instanceof q&&a.constructor===q?a.i:"type_error:SafeUrl"}
var Da=/^(?:audio\/(?:3gpp2|3gpp|aac|L16|midi|mp3|mp4|mpeg|oga|ogg|opus|x-m4a|x-matroska|x-wav|wav|webm)|font\/\w+|image\/(?:bmp|gif|jpeg|jpg|png|tiff|webp|x-icon)|video\/(?:mpeg|mp4|ogg|webm|quicktime|x-matroska))(?:;\w+=(?:\w+|"[\w;,= ]+"))*$/i,Ea=/^data:(.*);base64,[a-z0-9+\/]+=*$/i,Fa=/^(?:(?:https?|mailto|ftp):|[^:/?#]*(?:[/?#]|$))/i;function Ga(a){if(a instanceof q)return a;a="object"==typeof a&&a.h?a.g():String(a);Fa.test(a)||(a="about:invalid#zClosurez");return new q(a,r)}
var r={},Ha=new q("about:invalid#zClosurez",r);var v;a:{var Ia=l.navigator;if(Ia){var Ja=Ia.userAgent;if(Ja){v=Ja;break a}}v=""}function w(a){return-1!=v.indexOf(a)};function x(a,b,c){this.i=c===Ka?a:""}x.prototype.h=!0;x.prototype.g=function(){return this.i.toString()};x.prototype.toString=function(){return this.i.toString()};var Ka={};function La(a,b,c,d){a=a instanceof q?a:Ga(a);b=b||l;c=c instanceof p?c instanceof p&&c.constructor===p&&c.j===ta?c.i:"type_error:Const":c||"";return void 0!==d?b.open(u(a),c,d,void 0):b.open(u(a),c)};function Ma(a){Ma[" "](a);return a}Ma[" "]=la;function y(a,b,c){return Object.prototype.hasOwnProperty.call(a,b)?a[b]:a[b]=c(b)};var Na=w("Opera"),z=w("Trident")||w("MSIE"),Oa=w("Edge"),Pa=Oa||z,Qa=w("Gecko")&&!(-1!=v.toLowerCase().indexOf("webkit")&&!w("Edge"))&&!(w("Trident")||w("MSIE"))&&!w("Edge"),Ra=-1!=v.toLowerCase().indexOf("webkit")&&!w("Edge"),Sa=w("Macintosh");function Ta(){var a=l.document;return a?a.documentMode:void 0}var Ua;
a:{var Va="",Wa=function(){var a=v;if(Qa)return/rv:([^\);]+)(\)|;)/.exec(a);if(Oa)return/Edge\/([\d\.]+)/.exec(a);if(z)return/\b(?:MSIE|rv)[: ]([^\);]+)(\)|;)/.exec(a);if(Ra)return/WebKit\/(\S+)/.exec(a);if(Na)return/(?:Version)[ \/]?(\S+)/.exec(a)}();Wa&&(Va=Wa?Wa[1]:"");if(z){var Xa=Ta();if(null!=Xa&&Xa>parseFloat(Va)){Ua=String(Xa);break a}}Ua=Va}var Ya=Ua,Za={},$a;if(l.document&&z){var ab=Ta();$a=ab?ab:parseInt(Ya,10)||void 0}else $a=void 0;var bb=$a;function cb(a){return y(a.prototype,"$$generatedClassName",function(){return"Class$obf_"+{valueOf:function(){return++db}}})}var db=1E3;function A(){}A.prototype.u=function(){return this.j||(Object.defineProperties(this,{j:{value:++eb,enumerable:!1}}),this.j)};A.prototype.toString=function(){var a=B(fb(gb(this.constructor)))+"@";var b=(this.u()>>>0).toString(16);return a+B(b)};function D(){}h(D,A);D.prototype.i=function(a){this.h=a;if(a instanceof Object)try{a.A=this}catch(b){}};function hb(a){a.h instanceof Error&&(Error.captureStackTrace?Error.captureStackTrace(a.h):a.h.stack=Error().stack)}D.prototype.toString=function(){var a=fb(gb(this.constructor)),b=this.l;return null==b?a:B(a)+": "+B(b)};function ib(){}h(ib,D);function jb(){}h(jb,ib);var eb=0;function E(){}h(E,jb);E.prototype.i=function(a){jb.prototype.i.call(this,Object.is(this.g,"__noinit__")?a:this.g)};function kb(){}h(kb,E);function lb(a,b){return"string"==typeof a?a.charCodeAt(b):a.g(b)};function B(a){return null==a?"null":a.toString()}function mb(a){return 65536<=a?B(String.fromCharCode((55296+((a-65536|0)>>10&1023)|0)&65535))+B(String.fromCharCode((56320+((a-65536|0)&1023)|0)&65535)):String.fromCharCode(a&65535)}function nb(a,b){var c=b,d=a.length,e;b=lb(a,(e=c,c=c+1|0,e));var f;if(e=55296<=b&&56319>=b&&c<d)a=f=lb(a,c),e=56320<=a&&57343>=a;var g;e?g=65536+((b&1023)<<10)+(f&1023)|0:g=b;return g};function ob(a,b){this.h=a;this.g=b}h(ob,A);function fb(a){var b=cb(a.h);0!=a.g&&(b="L"+B(b)+";");a=a.g;for(var c="",d=0;d<a;d=d+1|0)c=B(c)+"[";return B(c)+B(b)}ob.prototype.toString=function(){return"class "+B(fb(this))};function gb(a){var b=0;return y(a.prototype,"$$class/"+b,function(){return new ob(a,b)})};function pb(a,b){return null==a?a:b?decodeURI(a):decodeURIComponent(a)};var qb=/^(?:([^:/?#.]+):)?(?:\/\/(?:([^/?#]*)@)?([^/#?]*?)(?::([0-9]+))?(?=[/#?]|$))?([^?#]+)?(?:\?([^#]*))?(?:#([\S\s]*))?$/;function rb(a){a=qb.exec(a);for(var b=[],c=0;7>=c;c=c+1|0)a.length<=c||null==a[c]?b.push(null):b.push(a[c]);return b}
function sb(a,b){var c=a.indexOf(mb(35));c=0>c?a.length:c;a:{var d=0;for(var e=b.length;0<(d=a.indexOf(b,d))&&d<c;){var f=nb(a,d-1|0);if(38==f||63==f){if((d+e|0)>=a.length)break a;f=nb(a,d+e|0);if(61==f||38==f||35==f)break a}d=d+(e+1)|0}d=-1}if(0>d)return null;e=a.indexOf(mb(38),d);if(0>e||e>c)e=c;d=d+(b.length+1)|0;b=Math.min(a.length,d);a=a.substr(b,Math.min(a.length,Math.max(d,e))-b|0);c=" ";for(b=0;0<=(b=c.indexOf("\\",b));)36==c.charCodeAt(b+1|0)?(d=B(c.substr(0,b|0))+"$",e=b=b+1|0,c=d+B(c.substr(e))):
(d=B(c.substr(0,b|0)),e=b=b+1|0,c=d+B(c.substr(e)));a=a.replace(/\+/g,c);return pb(a,!1)};function F(a,b){this.h=b;for(var c=[],d=!0,e=a.length-1;0<=e;e--){var f=a[e]|0;d&&f==b||(c[e]=f,d=!1)}this.g=c}var tb={};function ub(a){return-128<=a&&128>a?y(tb,a,function(b){return new F([b|0],0>b?-1:0)}):new F([a|0],0>a?-1:0)}function G(a){if(isNaN(a)||!isFinite(a))return H;if(0>a)return I(G(-a));for(var b=[],c=1,d=0;a>=c;d++)b[d]=a/c|0,c*=4294967296;return new F(b,0)}var H=ub(0),J=ub(1),vb=ub(16777216);
function K(a){if(-1==a.h)return-K(I(a));for(var b=0,c=1,d=0;d<a.g.length;d++){var e=L(a,d);b+=(0<=e?e:4294967296+e)*c;c*=4294967296}return b}F.prototype.toString=function(a){a=a||10;if(2>a||36<a)throw Error("radix out of range: "+a);if(M(this))return"0";if(-1==this.h)return"-"+I(this).toString(a);for(var b=G(Math.pow(a,6)),c=this,d="";;){var e=wb(c,b).g;c=N(c,O(e,b));var f=((0<c.g.length?c.g[0]:c.h)>>>0).toString(a);c=e;if(M(c))return f+d;for(;6>f.length;)f="0"+f;d=f+d}};
function L(a,b){return 0>b?0:b<a.g.length?a.g[b]:a.h}function M(a){if(0!=a.h)return!1;for(var b=0;b<a.g.length;b++)if(0!=a.g[b])return!1;return!0}function P(a,b){a=N(a,b);return-1==a.h?-1:M(a)?0:1}function I(a){for(var b=a.g.length,c=[],d=0;d<b;d++)c[d]=~a.g[d];return(new F(c,~a.h)).add(J)}F.prototype.abs=function(){return-1==this.h?I(this):this};
F.prototype.add=function(a){for(var b=Math.max(this.g.length,a.g.length),c=[],d=0,e=0;e<=b;e++){var f=d+(L(this,e)&65535)+(L(a,e)&65535),g=(f>>>16)+(L(this,e)>>>16)+(L(a,e)>>>16);d=g>>>16;f&=65535;g&=65535;c[e]=g<<16|f}return new F(c,c[c.length-1]&-2147483648?-1:0)};function N(a,b){return a.add(I(b))}
function O(a,b){if(M(a)||M(b))return H;if(-1==a.h)return-1==b.h?O(I(a),I(b)):I(O(I(a),b));if(-1==b.h)return I(O(a,I(b)));if(0>P(a,vb)&&0>P(b,vb))return G(K(a)*K(b));for(var c=a.g.length+b.g.length,d=[],e=0;e<2*c;e++)d[e]=0;for(e=0;e<a.g.length;e++)for(var f=0;f<b.g.length;f++){var g=L(a,e)>>>16,k=L(a,e)&65535,t=L(b,f)>>>16,n=L(b,f)&65535;d[2*e+2*f]+=k*n;Q(d,2*e+2*f);d[2*e+2*f+1]+=g*n;Q(d,2*e+2*f+1);d[2*e+2*f+1]+=k*t;Q(d,2*e+2*f+1);d[2*e+2*f+2]+=g*t;Q(d,2*e+2*f+2)}for(e=0;e<c;e++)d[e]=d[2*e+1]<<16|
d[2*e];for(e=c;e<2*c;e++)d[e]=0;return new F(d,0)}function Q(a,b){for(;(a[b]&65535)!=a[b];)a[b+1]+=a[b]>>>16,a[b]&=65535,b++}function S(a,b){this.g=a;this.h=b}
function wb(a,b){if(M(b))throw Error("division by zero");if(M(a))return new S(H,H);if(-1==a.h)return b=wb(I(a),b),new S(I(b.g),I(b.h));if(-1==b.h)return b=wb(a,I(b)),new S(I(b.g),b.h);if(30<a.g.length){if(-1==a.h||-1==b.h)throw Error("slowDivide_ only works with positive integers.");for(var c=J,d=b;0>=P(d,a);)c=xb(c,1),d=xb(d,1);var e=T(c,1),f=T(d,1);d=T(d,2);for(c=T(c,2);!M(d);){var g=f.add(d);0>=P(g,a)&&(e=e.add(c),f=g);d=T(d,1);c=T(c,1)}b=N(a,O(e,b));return new S(e,b)}for(e=H;0<=P(a,b);){c=Math.max(1,
Math.floor(K(a)/K(b)));d=Math.ceil(Math.log(c)/Math.LN2);d=48>=d?1:Math.pow(2,d-48);f=G(c);for(g=O(f,b);-1==g.h||0<P(g,a);)c-=d,f=G(c),g=O(f,b);M(f)&&(f=J);e=e.add(f);a=N(a,g)}return new S(e,a)}F.prototype.and=function(a){for(var b=Math.max(this.g.length,a.g.length),c=[],d=0;d<b;d++)c[d]=L(this,d)&L(a,d);return new F(c,this.h&a.h)};F.prototype.or=function(a){for(var b=Math.max(this.g.length,a.g.length),c=[],d=0;d<b;d++)c[d]=L(this,d)|L(a,d);return new F(c,this.h|a.h)};
F.prototype.xor=function(a){for(var b=Math.max(this.g.length,a.g.length),c=[],d=0;d<b;d++)c[d]=L(this,d)^L(a,d);return new F(c,this.h^a.h)};function xb(a,b){var c=b>>5;b%=32;for(var d=a.g.length+c+(0<b?1:0),e=[],f=0;f<d;f++)e[f]=0<b?L(a,f-c)<<b|L(a,f-c-1)>>>32-b:L(a,f-c);return new F(e,a.h)}function T(a,b){var c=b>>5;b%=32;for(var d=a.g.length-c,e=[],f=0;f<d;f++)e[f]=0<b?L(a,f+c)>>>b|L(a,f+c+1)<<32-b:L(a,f+c);return new F(e,a.h)};N(xb(J,32),J);N(xb(J,128),J);function yb(a){a&&"function"==typeof a.v&&a.v()};function U(){this.h=this.h;this.g=this.g}U.prototype.h=!1;U.prototype.v=function(){this.h||(this.h=!0,this.j())};U.prototype.j=function(){if(this.g)for(;this.g.length;)this.g.shift()()};var zb=!z||9<=Number(bb),Ab=!z||9<=Number(bb),Bb=z&&!y(Za,"9",function(){for(var a=0,b=ua(String(Ya)).split("."),c=ua("9").split("."),d=Math.max(b.length,c.length),e=0;0==a&&e<d;e++){var f=b[e]||"",g=c[e]||"";do{f=/(\d*)(\D*)(.*)/.exec(f)||["","","",""];g=/(\d*)(\D*)(.*)/.exec(g)||["","","",""];if(0==f[0].length&&0==g[0].length)break;a=Ca(0==f[1].length?0:parseInt(f[1],10),0==g[1].length?0:parseInt(g[1],10))||Ca(0==f[2].length,0==g[2].length)||Ca(f[2],g[2]);f=f[3];g=g[3]}while(0==a)}return 0<=a}),
Cb=function(){if(!l.addEventListener||!Object.defineProperty)return!1;var a=!1,b=Object.defineProperty({},"passive",{get:function(){a=!0}});try{l.addEventListener("test",la,b),l.removeEventListener("test",la,b)}catch(c){}return a}();function Db(a,b){this.type=a;this.g=this.target=b;this.defaultPrevented=!1}Db.prototype.h=function(){this.defaultPrevented=!0};function V(a,b){Db.call(this,a?a.type:"");this.relatedTarget=this.g=this.target=null;this.button=this.screenY=this.screenX=this.clientY=this.clientX=0;this.key="";this.metaKey=this.shiftKey=this.altKey=this.ctrlKey=!1;this.state=null;this.pointerId=0;this.pointerType="";this.i=null;if(a){var c=this.type=a.type,d=a.changedTouches&&a.changedTouches.length?a.changedTouches[0]:null;this.target=a.target||a.srcElement;this.g=b;if(b=a.relatedTarget){if(Qa){a:{try{Ma(b.nodeName);var e=!0;break a}catch(f){}e=
!1}e||(b=null)}}else"mouseover"==c?b=a.fromElement:"mouseout"==c&&(b=a.toElement);this.relatedTarget=b;d?(this.clientX=void 0!==d.clientX?d.clientX:d.pageX,this.clientY=void 0!==d.clientY?d.clientY:d.pageY,this.screenX=d.screenX||0,this.screenY=d.screenY||0):(this.clientX=void 0!==a.clientX?a.clientX:a.pageX,this.clientY=void 0!==a.clientY?a.clientY:a.pageY,this.screenX=a.screenX||0,this.screenY=a.screenY||0);this.button=a.button;this.key=a.key||"";this.ctrlKey=a.ctrlKey;this.altKey=a.altKey;this.shiftKey=
a.shiftKey;this.metaKey=a.metaKey;this.pointerId=a.pointerId||0;this.pointerType="string"===typeof a.pointerType?a.pointerType:Eb[a.pointerType]||"";this.state=a.state;this.i=a;a.defaultPrevented&&V.o.h.call(this)}}oa(V,Db);var Fb=[1,4,2],Eb={2:"touch",3:"pen",4:"mouse"};V.prototype.h=function(){V.o.h.call(this);var a=this.i;if(a.preventDefault)a.preventDefault();else if(a.returnValue=!1,Bb)try{if(a.ctrlKey||112<=a.keyCode&&123>=a.keyCode)a.keyCode=-1}catch(b){}};var Gb="closure_listenable_"+(1E6*Math.random()|0);var Hb=0;function Ib(a,b,c,d,e){this.listener=a;this.g=null;this.src=b;this.type=c;this.capture=!!d;this.h=e;this.key=++Hb;this.m=this.s=!1}function Jb(a){a.m=!0;a.listener=null;a.g=null;a.src=null;a.h=null};function Kb(a){this.src=a;this.g={};this.h=0}Kb.prototype.add=function(a,b,c,d,e){var f=a.toString();a=this.g[f];a||(a=this.g[f]=[],this.h++);var g;a:{for(g=0;g<a.length;++g){var k=a[g];if(!k.m&&k.listener==b&&k.capture==!!d&&k.h==e)break a}g=-1}-1<g?(b=a[g],c||(b.s=!1)):(b=new Ib(b,this.src,f,!!d,e),b.s=c,a.push(b));return b};function Lb(a,b){var c=b.type;if(c in a.g){var d=a.g[c],e=qa(d,b),f;(f=0<=e)&&Array.prototype.splice.call(d,e,1);f&&(Jb(b),0==a.g[c].length&&(delete a.g[c],a.h--))}};var Mb="closure_lm_"+(1E6*Math.random()|0),Nb={},Ob=0;function Pb(a,b,c,d,e){if(d&&d.once)return Qb(a,b,c,d,e);if(Array.isArray(b)){for(var f=0;f<b.length;f++)Pb(a,b[f],c,d,e);return null}c=Rb(c);return a&&a[Gb]?a.g.add(String(b),c,!1,ma(d)?!!d.capture:!!d,e):Sb(a,b,c,!1,d,e)}
function Sb(a,b,c,d,e,f){if(!b)throw Error("Invalid event type");var g=ma(e)?!!e.capture:!!e,k=Tb(a);k||(a[Mb]=k=new Kb(a));c=k.add(b,c,d,g,f);if(c.g)return c;d=Ub();c.g=d;d.src=a;d.listener=c;if(a.addEventListener)Cb||(e=g),void 0===e&&(e=!1),a.addEventListener(b.toString(),d,e);else if(a.attachEvent)a.attachEvent(Vb(b.toString()),d);else if(a.addListener&&a.removeListener)a.addListener(d);else throw Error("addEventListener and attachEvent are unavailable.");Ob++;return c}
function Ub(){var a=Wb,b=Ab?function(c){return a.call(b.src,b.listener,c)}:function(c){c=a.call(b.src,b.listener,c);if(!c)return c};return b}function Qb(a,b,c,d,e){if(Array.isArray(b)){for(var f=0;f<b.length;f++)Qb(a,b[f],c,d,e);return null}c=Rb(c);return a&&a[Gb]?a.g.add(String(b),c,!0,ma(d)?!!d.capture:!!d,e):Sb(a,b,c,!0,d,e)}
function Xb(a){if("number"!==typeof a&&a&&!a.m){var b=a.src;if(b&&b[Gb])Lb(b.g,a);else{var c=a.type,d=a.g;b.removeEventListener?b.removeEventListener(c,d,a.capture):b.detachEvent?b.detachEvent(Vb(c),d):b.addListener&&b.removeListener&&b.removeListener(d);Ob--;(c=Tb(b))?(Lb(c,a),0==c.h&&(c.src=null,b[Mb]=null)):Jb(a)}}}function Vb(a){return a in Nb?Nb[a]:Nb[a]="on"+a}
function Yb(a,b,c,d){var e=!0;if(a=Tb(a))if(b=a.g[b.toString()])for(b=b.concat(),a=0;a<b.length;a++){var f=b[a];f&&f.capture==c&&!f.m&&(f=Zb(f,d),e=e&&!1!==f)}return e}function Zb(a,b){var c=a.listener,d=a.h||a.src;a.s&&Xb(a);return c.call(d,b)}
function Wb(a,b){if(a.m)return!0;if(!Ab){if(!b)a:{b=["window","event"];for(var c=l,d=0;d<b.length;d++)if(c=c[b[d]],null==c){b=null;break a}b=c}d=b;b=new V(d,this);c=!0;if(!(0>d.keyCode||void 0!=d.returnValue)){a:{var e=!1;if(0==d.keyCode)try{d.keyCode=-1;break a}catch(g){e=!0}if(e||void 0==d.returnValue)d.returnValue=!0}d=[];for(e=b.g;e;e=e.parentNode)d.push(e);a=a.type;for(e=d.length-1;0<=e;e--){b.g=d[e];var f=Yb(d[e],a,!0,b);c=c&&f}for(e=0;e<d.length;e++)b.g=d[e],f=Yb(d[e],a,!1,b),c=c&&f}return c}return Zb(a,
new V(b,this))}function Tb(a){a=a[Mb];return a instanceof Kb?a:null}var $b="__closure_events_fn_"+(1E9*Math.random()>>>0);function Rb(a){if("function"===typeof a)return a;a[$b]||(a[$b]=function(b){return a.handleEvent(b)});return a[$b]};function W(a){U.call(this);this.l=a;this.i={}}oa(W,U);var ac=[];function bc(a){ra(a.i,function(b,c){this.i.hasOwnProperty(c)&&Xb(b)},a);a.i={}}W.prototype.j=function(){W.o.j.call(this);bc(this)};W.prototype.handleEvent=function(){throw Error("EventHandler.handleEvent not implemented");};function cc(a){U.call(this);this.i=a||document.body;this.l=new W(this);a=na(yb,this.l);this.h?a():(this.g||(this.g=[]),this.g.push(a));a=this.l;var b=this.i,c=this.u,d="click";Array.isArray(d)||(d&&(ac[0]=d.toString()),d=ac);for(var e=0;e<d.length;e++){var f=Pb(b,d[e],c||a.handleEvent,!1,a.l||a);if(!f)break;a.i[f.key]=f}}h(cc,U);
cc.prototype.u=function(a){if(!(!(zb?0==a.i.button:"click"==a.type||a.i.button&Fb[0])||Sa&&a.ctrlKey||a.defaultPrevented))for(var b=a.target;b&&b!=this.i;){if(b.tagName&&"a"==b.tagName.toLowerCase()){var c=b.getAttribute("href")||b.getAttributeNS("http://www.w3.org/1999/xlink","href"),d=c;try{var e=rb(c)[3];var f;if(f="www.google.com"===pb(e,!0)){var g=rb(c)[5];f="/url"===pb(g,!0)}if(f){var k=sb(c,"q");d=k?k:sb(c,"url")}}catch(C){a:{var t=C;if(null!=t){var n=t.A;if(null!=n){C=n;break a}}if(t instanceof
TypeError){var R=n=new kb;R.l=B(t);hb(R);n.g="__noinit__";n.g=t;n.i(new TypeError(n));t=n}else R=n=new E,R.l=B(t),hb(R),n.g="__noinit__",n.g=t,n.i(Error(n)),t=n;C=t}if(!(C instanceof ib))throw C.h;}d=null!=d?d:"";if(c!=d){e=void 0;b={target:"_blank",noreferrer:!0};c=window;d instanceof q?f=d:(f="undefined"!=typeof d.href?d.href:String(d),f instanceof q||(f="object"==typeof f&&f.h?f.g():String(f),Fa.test(f)?f=new q(f,r):(f=String(f),f=f.replace(/(%0A|%0D)/g,""),f=(g=f.match(Ea))&&Da.test(g[1])?new q(f,
r):null)),f=f||Ha);d=b.target||d.target;g=[];for(e in b)switch(e){case "width":case "height":case "top":case "left":g.push(e+"="+b[e]);break;case "target":case "noopener":case "noreferrer":break;default:g.push(e+"="+(b[e]?1:0))}e=g.join(",");if((w("iPhone")&&!w("iPod")&&!w("iPad")||w("iPad")||w("iPod"))&&c.navigator&&c.navigator.standalone&&d&&"_self"!=d)e="A",g=document,e=String(e),"application/xhtml+xml"===g.contentType&&(e=e.toLowerCase()),g=e=g.createElement(e),f=f instanceof q?f:Ga(f),g.href=
u(f),e.setAttribute("target",d),b.noreferrer&&e.setAttribute("rel","noreferrer"),b=document.createEvent("MouseEvent"),b.initMouseEvent("click",!0,!0,c,1),e.dispatchEvent(b);else if(b.noreferrer){if(c=La("",c,d,e),b=u(f),c){Pa&&-1!=b.indexOf(";")&&(b="'"+b.replace(/'/g,"%27")+"'");c.opener=null;Ba.test(b)&&(-1!=b.indexOf("&")&&(b=b.replace(va,"&amp;")),-1!=b.indexOf("<")&&(b=b.replace(wa,"&lt;")),-1!=b.indexOf(">")&&(b=b.replace(xa,"&gt;")),-1!=b.indexOf('"')&&(b=b.replace(ya,"&quot;")),-1!=b.indexOf("'")&&
(b=b.replace(za,"&#39;")),-1!=b.indexOf("\x00")&&(b=b.replace(Aa,"&#0;")));b='<meta name="referrer" content="no-referrer"><meta http-equiv="refresh" content="0; url='+b+'">';if(void 0===m)if(d=null,(e=l.trustedTypes)&&e.createPolicy){try{d=e.createPolicy("goog#html",{createHTML:pa,createScript:pa,createScriptURL:pa})}catch(C){l.console&&l.console.error(C.message)}m=d}else m=d;b=(d=m)?d.createHTML(b):b;b=new x(b,null,Ka);(c=c.document)&&c.write&&(c.write(b instanceof x&&b.constructor===x?b.i:"type_error:SafeHtml"),
c.close())}}else(c=La(f,c,d,e))&&b.noopener&&(c.opener=null);a.h();break}}b=b.parentNode}};function dc(a){new cc(a)}var X=["DOCS_installLinkReferrerSanitizer"],Y=l;X[0]in Y||"undefined"==typeof Y.execScript||Y.execScript("var "+X[0]);for(var Z;X.length&&(Z=X.shift());)X.length||void 0===dc?Y[Z]&&Y[Z]!==Object.prototype[Z]?Y=Y[Z]:Y=Y[Z]={}:Y[Z]=dc;}).call(this);
</script><script type="text/javascript" nonce="">DOCS_installLinkReferrerSanitizer();</script></body></html>